页面中特殊字符的处理

编码URI(javascript)

# [JS操作cookie以及本地存储(sessionStorage 和 localStorage )] 014-bD
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:
unescape,decodeURI,decodeURIComponent 。

区别:
我们可以知道:escape()除了 ASCII 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。

而encodeURI()用于编码整个URI,因为URI中的合法字符都不会被编码转换。

encodeURIComponent方法在编码单个URIComponent 应当是最常用的,它可以将参数中的中文、特殊字符进行转义,而不会影响整个URL。

参考:
关于URL编码
encodeURI encodeURIComponent 的作用 及 应用

php中编码url

# PHP - urlencode和rawurlencode的区别
https://blog.csdn.net/amonest/article/details/6431183
看看PHP Manual对两个函数的说明:

urlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。

rawurlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。

acuviewer中特殊字符串

页面中字符串显示如下:
Test Spcecial </chars>Lecturer ';":/.,?=-+_)(*&^%$#@!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<script type="text/javascript" src="inc/header.js.php"></script>

// header.js.php
<?php
...
?>
String.prototype.formatForJS = function(){
var s;
s = this.replaceAll("\\\\","\\\\");
s = s.replaceAll("&#39;","'");
s = s.replaceAll("'","\\'");
s = s.replaceAll('"','&quot;');
s = s.replaceAll('>','&gt;');
s = s.replaceAll('<','&lt;');
return s;
}
String.prototype.formatForHTML = function(){
var s;
s = this.replaceAll("'","&apos;");
s = s.replaceAll('"','&quot;');
s = s.replaceAll('>','&gt;');
s = s.replaceAll('<','&lt;');
return s;
}

// 使用
<script>
v.SubscribeDisplayName&&(sTitle = v.SubscribeDisplayName.formatForJS());
// 三元操作,后面的赋值不加`()`会报错:`Uncaught ReferenceError: Invalid left-hand side in assignment`


str = '<?php echo $langmsg['1054'];?>: <a href="login/channel.php?id=' + encodeURIComponent(d[3]) + '">' + (oCdrData.FAuthorName&&oCdrData.FAuthorName.formatForHTML()) + '</a>';
// 赋值操作中,短路运算不加`()`会影响 str的赋值:`Philip</a>`;`&&`前面的都没有计进去
</script>

// 使用acuview.php 中
<?php
$subscribe_author_html = $langmsg['1054'] . ':&nbsp;<a href="login/channel.php?id=' . rawurlencode($user_fid) . '">'.htmlentities($studio['FAuthorDisplayName']).'</a>';
?>
knowledge is no pay,reward is kindness
0%